Step Functions の最適化された統合と AWS SDK 統合の違いを教えてください
困っていた内容
Step Functions から Lambda を実行する検証を行っています。
Step Functions のワークフロースタジオでの設定では、最適化された統合と AWS SDK 統合を選択できますが、どちらも利用できるサービスの場合、どのような違いがあるのか教えてください。
どう対応すればいいの?
以下の AWS 公式ドキュメントでそれぞれの統合の違いが表になっていますので、まずは一覧でご確認ください。
ただし、具体的な違いはサービスごとに異なりますので、上記ドキュメントの各サービスへのリンクから具体的な違いをご確認ください。
例えば Lambda の場合、AWS 公式ドキュメントには以下の違いが明記されています。
・応答のPayloadフィールドは、エスケープされた Json から Json に解析されます。
・応答にフィールドが含まれている場合FunctionError、タスクは失敗します。
具体的な違いも 1 つご紹介します。
例えば、Lambda から以下のような JSON 形式のレスポンスを返した場合で比較してみます。
return { key1: "value1", key2: "value2", };
上記の JSON が、最適化された統合と AWS SDK 統合ではそれぞれ以下のような結果として取得されます。
最適化された統合
{ "key1": "value1", "key2": "value2" }
AWS SDK 統合
"{\"key1\":\"value1\",\"key2\":\"value2\"}"
上記より、Lambda から JSON 形式のレスポンスを返した場合、最適化された統合では JSON 形式で取得される一方、AWS SDK 統合 では文字列として取得されます。
そのため、後続の処理も変わってくるので、各サービスごとでの違いを把握したうえで、システムの設計などを行う必要があります。
別の観点からの違いとしては、最適化された統合でジョブの実行 (.sync) を実行する場合には、追加の IAM 許可が必要となることも AWS 公式ドキュメントに記載されています。
.sync を使用するサービス統合には追加の IAM 許可が必要です。
Step Functions で最適化された統合と AWS SDK 統合のどちらを選択するかは、AWS 公式ドキュメントで違いを確認したうえで検証などを行い、要件に合った方法を選択しましょう。